// 调用规则如下：
// 1.如果函数模板和普通函数都可以实现，优先调用普通函数
// 2.可以通过空模板参数列表来强制调用函数模板
// 3.函数模板也可以发生重载
// 4.如果函数模板可以产生更好的匹配，优先调用函数模板
#include <iostream>
using namespace std;

void myPrint01(int a, int b) {
    cout << "调用的普通函数" << endl;
}
template <class T>
void myPrint01(T a, T b) {
    cout << "调用的模板函数1" << endl;
}

void myPrint02(int a, int b);
template <class T>
void myPrint02(T a, T b) {
    cout << "调用的模板函数2" << endl;
}
template <class T>
void myPrint01(T a, T b, T c) {
    cout << "调用重载的模板函数" << endl;
}

void test01() {
    int a = 10;
    int b = 20;

    // myPrint01(a, b);
    // myPrint01(a, b, 100);

    // 通过空模板参数列表，强制调用函数模板
    myPrint02<>(a, b);

    // 如果函数模板产生更好的匹配，优先调用函数模板
    char c1 = 'a';
    char c2 = 'b';
    myPrint01(c1, c2);
}

int main() {
    test01();
    system("pause");
    return 0;
}